/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package redinftel.formularios;

import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import redinftel.entidades.Usuario;
import redinftel.sesiones.UsuarioFacadeRemote;

/**
 *Clase que recupera la contraseña del usuario
 * @author Six Degrees Team
 */
@ManagedBean
@RequestScoped
public class RecuperarBean {
    @EJB
    private UsuarioFacadeRemote usuarioFacade;
    private String email;
    private int codigoError;
/**
 *
 * @return codigoError
 */
    public int getCodigoError() {
        return codigoError;
    }

    public void setCodigoError(int codigoError) {
        this.codigoError = codigoError;
    }
    /** Creates a new instance of recuperarBean */
    public RecuperarBean() {
          ChangeLocaleBean.cambiar();
    }


    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
      public boolean validarEmail () {
        Pattern p = Pattern.compile("^[\\w\\-\\_]+(\\.[\\w\\-\\_]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$");
        Matcher m = p.matcher(email);
        if(m.find()){
            //Es correcta
            return true;
        }
        else{
            //No es correcta
            return false;
        }
    }
      /**
       *
       * @param usuario
       * @param mensaje
       * @param asunto
       * @throws MessagingException
       */
     public void enviarEmail(Usuario usuario,String mensaje,String asunto) throws MessagingException {
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.starttls.enable", "true");
        props.setProperty("mail.smtp.port", "587");
        props.setProperty("mail.smtp.user", "red.sixdegrees@gmail.com");
        props.setProperty("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);

        message.setFrom(new InternetAddress("red.sixdegrees@gmail.com"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(usuario.getEmail()));
        message.setSubject(asunto);
        message.setText(mensaje);

        Transport t = session.getTransport("smtp");
        t.connect("red.sixdegrees@gmail.com", "redsocial");
        t.sendMessage(message, message.getAllRecipients());
        t.close();

    }
     /**
      *
      * @return index en el caso de recuperar correctamente la contraseña
      */
    public String doRecuperar()
    {
        if (email.equals("")) {
            codigoError=1;
        } else if (!validarEmail()) {
            codigoError=2;
        } else {
            List<Usuario> usuario = usuarioFacade.findByEmail(email);
            if (usuario.isEmpty()) {
                codigoError=3;
            } else {
                String texto = "Hola \nEstimado/a " + usuario.get(0).getPerfil().getNombre() + ". Su contraseña en red social es: "
                        + usuario.get(0).getContrasenya();
                try {
                    enviarEmail(usuario.get(0), texto, "Recuperacion de contraseña");
                } catch (MessagingException ex) {
                    Logger.getLogger(RecuperarBean.class.getName()).log(Level.SEVERE, null, ex);
                }
                codigoError=4;
            }
        }
        return "index";
    }
}
